import Vue from 'vue'
import axios from 'axios'
import VueAxios from 'vue-axios'
import { getToken } from './token.js'

import router from '@/router/index.js'

import { MessageBox } from 'element-ui'

Vue.use(VueAxios, axios)

const instance = axios.create({
  baseURL: 'http://localhost:8080/api/v1',
  timeout: 10000,

  //请求前配置
  transformRequest: [
    function (data, headers) {
      // 不能无条件修改data
      // 判断参数是否是formData实例出来的对象,instanceof作用
      if (data instanceof FormData) {
        return data
      } else {
        let sp = new URLSearchParams()
        for (let key in data) {
          sp.append(key, data[key])
        }
        // 对 data 进行任意转换处理
        return sp
      }
    }
  ],
  headers: {
    'Content-Type': 'application/x-www-form-urlencoded'
  }
})

// 添加请求拦截器
instance.interceptors.request.use(
  function (config) {
    // 在发送请求之前做些什么
    if (getToken()) {
      // 给请求头添加token
      config.headers.Authorization = getToken()
    }
    return config
  },
  function (error) {
    // 对请求错误做些什么
    return Promise.reject(error)
  }
)

// 添加响应拦截器
instance.interceptors.response.use(
  function (response) {
    // 对响应数据做点什么
    return response
  },
  function (error) {
    // 对响应错误做点什么
    // 如果错误是403，证明没有登录返回登录页
    if (error.response.status === 403) {
      setTimeout(() => {
        console.clear()
      }, 500)
      MessageBox.alert('请重新登录', '温馨提示', {
        confirmButtonText: '确定',
        callback: action => {
          router.push('/login')
          // console.log(res);
        }
      })
    }
    return Promise.reject(error)
  }
)

export default instance
